// $Id: result_code.hpp 2 2009-09-02 08:47:42Z joseph2002 $
/*
 * Copyright 2009 Joseph Wu
 * Distributed under the Boost Software License, Version 1.0.
 * (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
 *
 * For more information, see http://xpcomplus.sourceforge.net
 */

#ifndef XPCOM_RESULT_CODE_HPP
#define XPCOM_RESULT_CODE_HPP

#include <xpcom/config.hpp>
#include <xpcom/result.hpp>

#ifdef BOOST_HAS_ABI_HEADERS
#include BOOST_ABI_PREFIX
#endif

//
// Standard XPCOM modules
//
XPCOM_DEFINE_RESULT_MODULE(NS_ERROR_MODULE_XPCOM,       1);
XPCOM_DEFINE_RESULT_MODULE(NS_ERROR_MODULE_BASE,        2);
XPCOM_DEFINE_RESULT_MODULE(NS_ERROR_MODULE_GFX,         3);
XPCOM_DEFINE_RESULT_MODULE(NS_ERROR_MODULE_WIDGET,      4);
XPCOM_DEFINE_RESULT_MODULE(NS_ERROR_MODULE_CALENDAR,    5);
XPCOM_DEFINE_RESULT_MODULE(NS_ERROR_MODULE_NETWORK,     6);
XPCOM_DEFINE_RESULT_MODULE(NS_ERROR_MODULE_PLUGINS,     7);
XPCOM_DEFINE_RESULT_MODULE(NS_ERROR_MODULE_LAYOUT,      8);
XPCOM_DEFINE_RESULT_MODULE(NS_ERROR_MODULE_HTMLPARSER,  9);
XPCOM_DEFINE_RESULT_MODULE(NS_ERROR_MODULE_RDF,         10);
XPCOM_DEFINE_RESULT_MODULE(NS_ERROR_MODULE_UCONV,       11);
XPCOM_DEFINE_RESULT_MODULE(NS_ERROR_MODULE_REG,         12);
XPCOM_DEFINE_RESULT_MODULE(NS_ERROR_MODULE_FILES,       13);
XPCOM_DEFINE_RESULT_MODULE(NS_ERROR_MODULE_DOM,         14);
XPCOM_DEFINE_RESULT_MODULE(NS_ERROR_MODULE_IMGLIB,      15);
XPCOM_DEFINE_RESULT_MODULE(NS_ERROR_MODULE_MAILNEWS,    16);
XPCOM_DEFINE_RESULT_MODULE(NS_ERROR_MODULE_EDITOR,      17);
XPCOM_DEFINE_RESULT_MODULE(NS_ERROR_MODULE_XPCONNECT,   18);
XPCOM_DEFINE_RESULT_MODULE(NS_ERROR_MODULE_PROFILE,     19);
XPCOM_DEFINE_RESULT_MODULE(NS_ERROR_MODULE_LDAP,        20);
XPCOM_DEFINE_RESULT_MODULE(NS_ERROR_MODULE_SECURITY,    21);
XPCOM_DEFINE_RESULT_MODULE(NS_ERROR_MODULE_DOM_XPATH,   22);
XPCOM_DEFINE_RESULT_MODULE(NS_ERROR_MODULE_DOM_RANGE,   23);
XPCOM_DEFINE_RESULT_MODULE(NS_ERROR_MODULE_URILOADER,   24);
XPCOM_DEFINE_RESULT_MODULE(NS_ERROR_MODULE_CONTENT,     25);
XPCOM_DEFINE_RESULT_MODULE(NS_ERROR_MODULE_PYXPCOM,     26);
XPCOM_DEFINE_RESULT_MODULE(NS_ERROR_MODULE_XSLT,        27);
XPCOM_DEFINE_RESULT_MODULE(NS_ERROR_MODULE_IPC,         28);
XPCOM_DEFINE_RESULT_MODULE(NS_ERROR_MODULE_SVG,         29);
XPCOM_DEFINE_RESULT_MODULE(NS_ERROR_MODULE_STORAGE,     30);
XPCOM_DEFINE_RESULT_MODULE(NS_ERROR_MODULE_SCHEMA,      31);
XPCOM_DEFINE_RESULT_MODULE(NS_ERROR_MODULE_DOM_FILE,    32);

XPCOM_DEFINE_RESULT_MODULE(NS_ERROR_MODULE_GENERAL,     51);

//
// Standard result values
//

XPCOM_DEFINE_RESULT_VALUE(NS_ERROR_BASE, 0xC1F30000);

// Returned when an instance is not initialized
XPCOM_DEFINE_RESULT_VALUE(NS_ERROR_NOT_INITIALIZED, NS_ERROR_BASE + 1);

// Returned when an instance is already initialized
XPCOM_DEFINE_RESULT_VALUE(NS_ERROR_ALREADY_INITIALIZED, NS_ERROR_BASE + 2);

// Returned by a not implemented function
XPCOM_DEFINE_RESULT_VALUE(NS_ERROR_NOT_IMPLEMENTED, 0x80004001L);

// Returned when a given interface is not supported
XPCOM_DEFINE_RESULT_VALUE(NS_NOINTERFACE, 0x80004002L);
XPCOM_DEFINE_RESULT_VALUE(NS_ERROR_NO_INTERFACE, NS_NOINTERFACE);

// Returned when a pointer should not be null
XPCOM_DEFINE_RESULT_VALUE(NS_ERROR_INVALID_POINTER, 0x80004003L);
XPCOM_DEFINE_RESULT_VALUE(NS_ERROR_NULL_POINTER, NS_ERROR_INVALID_POINTER);

// Returned when a function aborts
XPCOM_DEFINE_RESULT_VALUE(NS_ERROR_ABORT, 0x80004004L);

// Returned when a function fails
XPCOM_DEFINE_RESULT_VALUE(NS_ERROR_FAILURE, 0x80004005L);

// Returned when an unexpected error occurs
XPCOM_DEFINE_RESULT_VALUE(NS_ERROR_UNEXPECTED, 0x8000FFFFL);

// Returned when a memory allocation fails
XPCOM_DEFINE_RESULT_VALUE(NS_ERROR_OUT_OF_MEMORY, 0x8007000EL);

// Returned when an illegal value is passed
XPCOM_DEFINE_RESULT_VALUE(NS_ERROR_ILLEGAL_VALUE, 0x80070057L);
XPCOM_DEFINE_RESULT_VALUE(NS_ERROR_INVALID_ARG, NS_ERROR_ILLEGAL_VALUE);

// Returned when a class doesn't allow aggregation
XPCOM_DEFINE_RESULT_VALUE(NS_ERROR_NO_AGGREGATION, 0x80040110L);

// Returned when an operation can't complete due to an unavailable resource
XPCOM_DEFINE_RESULT_VALUE(NS_ERROR_NOT_AVAILABLE, 0x80040111L);

// Returned when a class is not registered
XPCOM_DEFINE_RESULT_VALUE(NS_ERROR_FACTORY_NOT_REGISTERED, 0x80040154L);

// Returned when a class cannot be registered, but may be tried again later
XPCOM_DEFINE_RESULT_VALUE(NS_ERROR_FACTORY_REGISTER_AGAIN, 0x80040155L);

// Returned when a dynamically loaded factory couldn't be found
XPCOM_DEFINE_RESULT_VALUE(NS_ERROR_FACTORY_NOT_LOADED, 0x800401F8L);

// Returned when a factory doesn't support signatures
XPCOM_DEFINE_RESULT_VALUE(NS_ERROR_FACTORY_NO_SIGNATURE_SUPPORT, NS_ERROR_BASE + 0x101);

// Returned when a factory already is registered
XPCOM_DEFINE_RESULT_VALUE(NS_ERROR_FACTORY_EXISTS, NS_ERROR_BASE + 0x100);

// Returned when a proxy could not be create a proxy for one of the in
// parameters this is returned only when the "real" method has not been invoked
XPCOM_DEFINE_RESULT_VALUE(NS_ERROR_PROXY_INVALID_IN_PARAMETER, 0x80010010L);

// Returned when a proxy could not be create a proxy for one of the out
// parameters this is returned only when the "real" method has already been
// invoked
XPCOM_DEFINE_RESULT_VALUE(NS_ERROR_PROXY_INVALID_OUT_PARAMETER, 0x80010011L);

//
// I/O results
//

// Stream closed
XPCOM_DEFINE_RESULT_E(NS_BASE_STREAM_CLOSED,                NS_ERROR_MODULE_BASE, 2);

// Stream error from the operating system
XPCOM_DEFINE_RESULT_E(NS_BASE_STREAM_OSERROR,               NS_ERROR_MODULE_BASE, 3);

XPCOM_DEFINE_RESULT_E(NS_BASE_STREAM_ILLEGAL_ARGS,          NS_ERROR_MODULE_BASE, 4);
XPCOM_DEFINE_RESULT_E(NS_BASE_STREAM_NO_CONVERTER,          NS_ERROR_MODULE_BASE, 5);
XPCOM_DEFINE_RESULT_E(NS_BASE_STREAM_BAD_CONVERSION,        NS_ERROR_MODULE_BASE, 6);
XPCOM_DEFINE_RESULT_E(NS_BASE_STREAM_WOULD_BLOCK,           NS_ERROR_MODULE_BASE, 7);

XPCOM_DEFINE_RESULT_E(NS_ERROR_FILE_UNRECOGNIZED_PATH,      NS_ERROR_MODULE_FILES, 1);
XPCOM_DEFINE_RESULT_E(NS_ERROR_FILE_UNRESOLVABLE_SYMLINK,   NS_ERROR_MODULE_FILES, 2);
XPCOM_DEFINE_RESULT_E(NS_ERROR_FILE_EXECUTION_FAILED,       NS_ERROR_MODULE_FILES, 3);
XPCOM_DEFINE_RESULT_E(NS_ERROR_FILE_UNKNOWN_TYPE,           NS_ERROR_MODULE_FILES, 4);
XPCOM_DEFINE_RESULT_E(NS_ERROR_FILE_DESTINATION_NOT_DIR,    NS_ERROR_MODULE_FILES, 5);
XPCOM_DEFINE_RESULT_E(NS_ERROR_FILE_TARGET_DOES_NOT_EXIST,  NS_ERROR_MODULE_FILES, 6);
XPCOM_DEFINE_RESULT_E(NS_ERROR_FILE_COPY_OR_MOVE_FAILED,    NS_ERROR_MODULE_FILES, 7);
XPCOM_DEFINE_RESULT_E(NS_ERROR_FILE_ALREADY_EXISTS,         NS_ERROR_MODULE_FILES, 8);
XPCOM_DEFINE_RESULT_E(NS_ERROR_FILE_INVALID_PATH,           NS_ERROR_MODULE_FILES, 9);
XPCOM_DEFINE_RESULT_E(NS_ERROR_FILE_DISK_FULL,              NS_ERROR_MODULE_FILES, 10);
XPCOM_DEFINE_RESULT_E(NS_ERROR_FILE_CORRUPTED,              NS_ERROR_MODULE_FILES, 11);
XPCOM_DEFINE_RESULT_E(NS_ERROR_FILE_NOT_DIRECTORY,          NS_ERROR_MODULE_FILES, 12);
XPCOM_DEFINE_RESULT_E(NS_ERROR_FILE_IS_DIRECTORY,           NS_ERROR_MODULE_FILES, 13);
XPCOM_DEFINE_RESULT_E(NS_ERROR_FILE_IS_LOCKED,              NS_ERROR_MODULE_FILES, 14);
XPCOM_DEFINE_RESULT_E(NS_ERROR_FILE_TOO_BIG,                NS_ERROR_MODULE_FILES, 15);
XPCOM_DEFINE_RESULT_E(NS_ERROR_FILE_NO_DEVICE_SPACE,        NS_ERROR_MODULE_FILES, 16);
XPCOM_DEFINE_RESULT_E(NS_ERROR_FILE_NAME_TOO_LONG,          NS_ERROR_MODULE_FILES, 17);
XPCOM_DEFINE_RESULT_E(NS_ERROR_FILE_NOT_FOUND,              NS_ERROR_MODULE_FILES, 18);
XPCOM_DEFINE_RESULT_E(NS_ERROR_FILE_READ_ONLY,              NS_ERROR_MODULE_FILES, 19);
XPCOM_DEFINE_RESULT_E(NS_ERROR_FILE_DIR_NOT_EMPTY,          NS_ERROR_MODULE_FILES, 20);
XPCOM_DEFINE_RESULT_E(NS_ERROR_FILE_ACCESS_DENIED,          NS_ERROR_MODULE_FILES, 21);

XPCOM_DEFINE_RESULT_S(NS_SUCCESS_FILE_DIRECTORY_EMPTY,      NS_ERROR_MODULE_FILES, 1);

// Result codes used by IDirectoryServiceProvider2
XPCOM_DEFINE_RESULT_S(NS_SUCCESS_AGGREGATE_RESULT,          NS_ERROR_MODULE_FILES, 2);

// Result codes used by IVariant
XPCOM_DEFINE_RESULT_E(NS_ERROR_CANNOT_CONVERT_DATA,         NS_ERROR_MODULE_XPCOM, 1);
XPCOM_DEFINE_RESULT_E(NS_ERROR_OBJECT_IS_IMMUTABLE,         NS_ERROR_MODULE_XPCOM, 2);
XPCOM_DEFINE_RESULT_E(NS_ERROR_LOSS_OF_SIGNIFICANT_DATA,    NS_ERROR_MODULE_XPCOM, 3);

XPCOM_DEFINE_RESULT_S(NS_SUCCESS_LOSS_OF_INSIGNIFICANT_DATA, NS_ERROR_MODULE_XPCOM, 1);

// Various operations are not permitted during XPCOM shutdown and will fail
// with this exception
XPCOM_DEFINE_RESULT_E(NS_ERROR_ILLEGAL_DURING_SHUTDOWN,     NS_ERROR_MODULE_XPCOM, 30);

#ifdef BOOST_HAS_ABI_HEADERS
#include BOOST_ABI_SUFFIX
#endif

#endif // XPCOM_RESULT_CODE_HPP
